www.gusucode.com > VC++ 宾馆管理系统(MSSQL) > VC++ 宾馆管理系统(MSSQL)/gusucode/Code/Hotel_MISView.cpp

    //Download by http://www.NewXing.com
// Hotel_MISView.cpp : implementation of the CHotel_MISView class
//

#include "stdafx.h"
#include "Hotel_MIS.h"

#include "Hotel_MISDoc.h"
#include "Hotel_MISView.h"
#include "RoomTypeDLG.h"
#include "RoomDLG.h"
#include "CheckRoomDLG.h"
#include "CheckRemainDLG.h"
#include "BookInDLG.h"
#include "SearchBookInDLG.h"
#include "CheckOutDLG.h"
#include "SearchCheckOutDLG.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CHotel_MISView

IMPLEMENT_DYNCREATE(CHotel_MISView, CView)

BEGIN_MESSAGE_MAP(CHotel_MISView, CView)
	//{{AFX_MSG_MAP(CHotel_MISView)
	ON_WM_SIZE()
	ON_WM_CONTEXTMENU()
	ON_COMMAND(ID_MENU_ADDROOMTYPE, OnAddRoomType)
	ON_COMMAND(ID_MENU_ALTERROOMTYPE, OnAlterRoomType)
	ON_COMMAND(ID_MENU_DELROOMTYPE, OnDelRoomType)
	ON_COMMAND(ID_MENU_ADDROOM, OnAddRoom)
	ON_COMMAND(ID_MENU_ALTERROOM, OnAlterRoom)
	ON_COMMAND(ID_MENU_DELROOM, OnDelRoom)
	ON_COMMAND(ID_MENU_CHECKROOM, OnCheckRoom)
	ON_COMMAND(ID_MENU_CHECKREMAIN, OnCheckRemain)
	ON_COMMAND(ID_MENU_ADDBOOKIN, OnAddBookIn)
	ON_COMMAND(ID_MENU_ALTERBOOKIN, OnAlterBookIn)
	ON_COMMAND(ID_MENU_SEARCHBOOKIN, OnSearchBookIn)
	ON_COMMAND(ID_MENU_ADDCHECKOUT, OnAddCheckOut)
	ON_COMMAND(ID_MENU_ALTERCHECKOUT, OnAlterCheckOut)
	ON_COMMAND(ID_MENU_SEARCHCHECKOUT, OnSearchCheckOut)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CHotel_MISView construction/destruction

CHotel_MISView::CHotel_MISView()
{
	// TODO: add construction code here
    m_sCurrentList = "";
}

CHotel_MISView::~CHotel_MISView()
{
}

BOOL CHotel_MISView::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs
    
	return CView::PreCreateWindow(cs);
}

/////////////////////////////////////////////////////////////////////////////
// CHotel_MISView drawing

void CHotel_MISView::OnDraw(CDC* pDC)
{
	CHotel_MISDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	// TODO: add draw code for native data here
}

/////////////////////////////////////////////////////////////////////////////
// CHotel_MISView diagnostics

#ifdef _DEBUG
void CHotel_MISView::AssertValid() const
{
	CView::AssertValid();
}

void CHotel_MISView::Dump(CDumpContext& dc) const
{
	CView::Dump(dc);
}

CHotel_MISDoc* CHotel_MISView::GetDocument() // non-debug version is inline
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CHotel_MISDoc)));
	return (CHotel_MISDoc*)m_pDocument;
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CHotel_MISView message handlers

void CHotel_MISView::OnSize(UINT nType, int cx, int cy) 
{
	CView::OnSize(nType, cx, cy);
	
	// TODO: Add your message handler code here
	
    if (m_ListCtrl)	
	{
		CRect rect;
	    GetClientRect(rect);
		rect.top += 30;
		m_ListCtrl.MoveWindow(rect);
	}
}

void CHotel_MISView::LoadListCtrl()
{
	CRect rect;
	GetClientRect(rect);
	rect.top += 30;

	m_ListCtrl.Create(WS_CHILD|WS_VISIBLE|WS_BORDER|LVS_REPORT,
                      rect, this, 1);

	m_ListCtrl.SetBkColor(RGB(177, 151, 240));
	m_ListCtrl.SetTextColor(RGB(0,0,0));
	m_ListCtrl.SetTextBkColor(RGB(177, 151, 240));
	
	m_ListCtrl.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES|LVS_EX_HEADERDRAGDROP);
	m_ListCtrl.InsertColumn(0,"Node ID", LVCFMT_LEFT, 250);
	m_ListCtrl.InsertColumn(1,"2 ID", LVCFMT_LEFT, 250);
	
	CString str;
	for (int i=0; i<100; i++)
	{
		str.Format("%d", i);
		m_ListCtrl.InsertItem(i, str);
	}	
}

void CHotel_MISView::UnLoadListCtrl()
{
	m_ListCtrl.DestroyWindow();
}

void CHotel_MISView::OnContextMenu(CWnd* pWnd, CPoint point) 
{
		// TODO: Add your message handler code here
	if ( ""==m_sCurrentList ) return;
	
	CMenu menu;
	if ( _T("房间标准列表")==m_sCurrentList ) menu.LoadMenu(IDR_MENU_ROOMTYPE);
	else if ( _T("客房信息列表")==m_sCurrentList ) menu.LoadMenu(IDR_MENU_ROOM);
	else if ( _T("定房信息列表")==m_sCurrentList ) menu.LoadMenu(IDR_MENU_BOOKIN);
	else if ( _T("结算信息列表")==m_sCurrentList ) menu.LoadMenu(IDR_MENU_CHECKOUT);
	CMenu* pMenu=menu.GetSubMenu(0);
	pMenu->TrackPopupMenu(TPM_LEFTALIGN|TPM_LEFTBUTTON|TPM_RIGHTBUTTON,point.x,point.y,this);
	
	return;
}

void CHotel_MISView::OnAddRoomType() 
{
	// TODO: Add your command handler code here
	
	CRoomTypeDLG dlg;
    dlg.m_bAppend = true;
    dlg.DoModal();
}

void CHotel_MISView::OnInitialUpdate() 
{
	CView::OnInitialUpdate();
	// TODO: Add your specialized code here and/or call the base class
	
	
	// Create a Static ctrl for tip
	CRect rect;
	rect.left = rect.top =5;
    rect.bottom = 30;
	rect.right = 120;
	m_StaticCtrl.Create(m_sCurrentList, WS_VISIBLE, rect, this, 1);	
}

void CHotel_MISView::RefreshRoomType()
{
	if (m_ListCtrl)	m_ListCtrl.DestroyWindow();
	
    CreateRoomType();
    
	m_sCurrentList = _T("房间标准列表");
    m_StaticCtrl.SetWindowText(m_sCurrentList);
}

void CHotel_MISView::CreateRoomType()
{
	//Update m_sCurrentList and Static Ctrl
	m_sCurrentList = _T("房间标准列表");
    m_StaticCtrl.SetWindowText(m_sCurrentList);
	
	// Get Client Rect
	CRect rect;
	GetClientRect(rect);
	rect.top += 30;

	// Create
	m_ListCtrl.Create(WS_CHILD|WS_VISIBLE|WS_BORDER|LVS_REPORT, rect, this, 1);

	// Set Color
	m_ListCtrl.SetBkColor(RGB(177, 151, 240));
	m_ListCtrl.SetTextColor(RGB(0,0,0));
	m_ListCtrl.SetTextBkColor(RGB(177, 151, 240));
	
	// Set EX-Style
	m_ListCtrl.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES|LVS_EX_HEADERDRAGDROP);

	// Create Header
	m_ListCtrl.InsertColumn(0,_T("标准编号"), LVCFMT_LEFT, 100);
	m_ListCtrl.InsertColumn(1,_T("标准名称"), LVCFMT_LEFT, 100);
    m_ListCtrl.InsertColumn(2,_T("房间面积"), LVCFMT_LEFT, 100);
	m_ListCtrl.InsertColumn(3,_T("床位数量"), LVCFMT_LEFT, 100);
	m_ListCtrl.InsertColumn(4,_T("住房单价/每天"), LVCFMT_LEFT, 100);
	m_ListCtrl.InsertColumn(5,_T("是否有空调"), LVCFMT_LEFT, 100);
	m_ListCtrl.InsertColumn(6,_T("是否有电话"), LVCFMT_LEFT, 100);
	m_ListCtrl.InsertColumn(7,_T("是否有电视"), LVCFMT_LEFT, 100);
	m_ListCtrl.InsertColumn(8,_T("是否有卫生间"), LVCFMT_LEFT, 100);

	// Get all records
	_variant_t Holder, strQuery;
    strQuery = "select * from roomtype order by typeid";
	theApp.ADOExecute(theApp.m_pADOSet, strQuery);
    int iCount = theApp.m_pADOSet->GetRecordCount();
	if ( 0==iCount ) return;
	
    CString str;
	theApp.m_pADOSet->MoveFirst();
	for(int i=0; i<iCount; i++)
	{
		// Get typeid
		Holder = theApp.m_pADOSet->GetCollect("typeid");
	    str = Holder.vt==VT_NULL?"":(char*)(_bstr_t)Holder;
	    m_ListCtrl.InsertItem(i, str);
	    // Get typename
        Holder = theApp.m_pADOSet->GetCollect("typename");
	    str = Holder.vt==VT_NULL?"":(char*)(_bstr_t)Holder;
	    m_ListCtrl.SetItemText(i, 1, str);
		// Get area
        Holder = theApp.m_pADOSet->GetCollect("area");
	   	str.Format("%.2f", Holder.dblVal);
	    m_ListCtrl.SetItemText(i, 2, str);
		// Get bednum
        Holder = theApp.m_pADOSet->GetCollect("bednum");
	    str.Format("%d",  Holder.vt==VT_NULL?0:Holder.intVal);
	    m_ListCtrl.SetItemText(i, 3, str);
		// Get price
        Holder = theApp.m_pADOSet->GetCollect("price");
	    str.Format("%.2f",  Holder.vt==VT_NULL?0:Holder.dblVal);
	    m_ListCtrl.SetItemText(i, 4, str);
		// Get airCondition
       	Holder = theApp.m_pADOSet->GetCollect("haircondition");
	    if (Holder.vt==VT_NULL?0:Holder.iVal) str = _T("有"); else str = _T("没有");
		m_ListCtrl.SetItemText(i, 5, str);
		// Get Phone
        Holder = theApp.m_pADOSet->GetCollect("htelephone");
	    if (Holder.vt==VT_NULL?0:Holder.iVal) str = _T("有"); else str = _T("没有");
		m_ListCtrl.SetItemText(i, 6, str);
		// Get TV
        Holder = theApp.m_pADOSet->GetCollect("htelevision");
	    if (Holder.vt==VT_NULL?0:Holder.iVal) str = _T("有"); else str = _T("没有");
		m_ListCtrl.SetItemText(i, 7, str);
        // Get TV
        Holder = theApp.m_pADOSet->GetCollect("htoilet");
	    if (Holder.vt==VT_NULL?0:Holder.iVal) str = _T("有"); else str = _T("没有");
		m_ListCtrl.SetItemText(i, 8, str);
		
		theApp.m_pADOSet->MoveNext();
	}
}

void CHotel_MISView::OnAlterRoomType() 
{
	// TODO: Add your command handler code here
	if ( m_ListCtrl && m_sCurrentList!="房间标准列表" )	
	{
		m_ListCtrl.DestroyWindow();
	    CreateRoomType();
	    return;
	}
    if ( !m_ListCtrl )
	{
		CreateRoomType();
	    return;
	}  
    
	//Popup Alter Dialog
	POSITION pos = m_ListCtrl.GetFirstSelectedItemPosition();
    if (pos == NULL) AfxMessageBox(_T("没有选中的记录!"), MB_ICONEXCLAMATION);
    else
	{
       CRoomTypeDLG dlg;
       dlg.m_bAppend = false;   
	   CString str;
	   int iItem = m_ListCtrl.GetNextSelectedItem(pos);
       // Get typeid
	   dlg.m_sTypeID = m_ListCtrl.GetItemText(iItem, 0);
	   // Get typename
       dlg.m_sTypeName = m_ListCtrl.GetItemText(iItem, 1);
	   // Get area
       dlg.m_sArea = m_ListCtrl.GetItemText(iItem, 2);
	   // Get bednum
       dlg.m_sBedNo = m_ListCtrl.GetItemText(iItem, 3);
	   // Get price
       dlg.m_sPrice = m_ListCtrl.GetItemText(iItem, 4);
	   // Get airCondition
       str = m_ListCtrl.GetItemText(iItem, 5);
	   if ( _T("有")==str ) dlg.m_bAirCon = true;
	   else dlg.m_bAirCon = false;
	   // Get Phone
       str = m_ListCtrl.GetItemText(iItem, 6);
	   if ( _T("有")==str ) dlg.m_bTel = true;
	   else dlg.m_bTel = false;
	   // Get TV
       str = m_ListCtrl.GetItemText(iItem, 7);
	   if ( _T("有")==str ) dlg.m_bTV = true;
	   else dlg.m_bTV = false;
       // Get TV
       str = m_ListCtrl.GetItemText(iItem, 8);
	   if ( _T("有")==str ) dlg.m_bToilet = true;
	   else dlg.m_bToilet = false;
	   dlg.DoModal();
	}
}

void CHotel_MISView::OnDelRoomType() 
{
	// TODO: Add your command handler code here
	if ( m_ListCtrl && m_sCurrentList!="房间标准列表" )	
	{
		m_ListCtrl.DestroyWindow();
	    CreateRoomType();
	    return;
	}
    if ( !m_ListCtrl )
	{
		CreateRoomType();
	    return;
	}
	
	// Del Records
	POSITION pos = m_ListCtrl.GetFirstSelectedItemPosition();
    if ( pos == NULL ) 
	{
		AfxMessageBox(_T("没有选中的记录!"), MB_ICONEXCLAMATION);
		return;
	}
    else
	{
        int iItem;       
		CString sID;
		_variant_t Holder, strQuery;
		while (pos)
		{
            iItem = m_ListCtrl.GetNextSelectedItem(pos);
            sID = m_ListCtrl.GetItemText(iItem, 0);
		    strQuery = "delete from roomtype where typeid='"+sID+"'";
	        theApp.ADOExecute(theApp.m_pADOSet, strQuery);
		}
	}
	// Refresh List
	RefreshRoomType();
}

void CHotel_MISView::OnAddRoom() 
{
	// TODO: Add your command handler code here
    	
	// Check RooType 
	_variant_t strQuery, Holder;	
	strQuery = "select typename from roomtype";
	theApp.ADOExecute(theApp.m_pADOSet, strQuery);
	int iCount = theApp.m_pADOSet->GetRecordCount();
	if ( 0==iCount ) 
	{
		AfxMessageBox(_T("请先进行客房标准设置!"), MB_ICONEXCLAMATION);
		return;
	}
		
	CRoomDLG dlg;
	dlg.m_bAppend = true;
	dlg.DoModal();
}

void CHotel_MISView::RefreshRoom(_variant_t strQuery)
{
	if (m_ListCtrl)	m_ListCtrl.DestroyWindow();
	
 	CreateRoom( strQuery );
    
	m_sCurrentList = _T("客房信息列表");
    m_StaticCtrl.SetWindowText(m_sCurrentList);
}

void CHotel_MISView::CreateRoom(_variant_t strQuery)
{
	//Update m_sCurrentList and Static Ctrl
	m_sCurrentList = _T("客房信息列表");
    m_StaticCtrl.SetWindowText(m_sCurrentList);
	
	// Get Client Rect
	CRect rect;
	GetClientRect(rect);
	rect.top += 30;

	// Create
	m_ListCtrl.Create(WS_CHILD|WS_VISIBLE|WS_BORDER|LVS_REPORT, rect, this, 1);

	// Set Color
	m_ListCtrl.SetBkColor(RGB(177, 151, 240));
	m_ListCtrl.SetTextColor(RGB(0,0,0));
	m_ListCtrl.SetTextBkColor(RGB(177, 151, 240));
	
	// Set EX-Style
	m_ListCtrl.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES|LVS_EX_HEADERDRAGDROP);

	// Create Header
	m_ListCtrl.InsertColumn(0,_T("客房编号"), LVCFMT_LEFT, 100);
	m_ListCtrl.InsertColumn(1,_T("客房类型"), LVCFMT_LEFT, 100);
    m_ListCtrl.InsertColumn(2,_T("客房位置"), LVCFMT_LEFT, 100);
	m_ListCtrl.InsertColumn(3,_T("客房单价"), LVCFMT_LEFT, 100);
	m_ListCtrl.InsertColumn(4,_T("是否被定"), LVCFMT_LEFT, 100);
	m_ListCtrl.InsertColumn(5,_T("备注"), LVCFMT_LEFT, 200);

	// Get all records
	_variant_t Holder;
    theApp.ADOExecute(theApp.m_pADOSet, strQuery);
    int iCount = theApp.m_pADOSet->GetRecordCount();
	if ( 0==iCount ) return;
	
    CString str;
	theApp.m_pADOSet->MoveFirst();
	for(int i=0; i<iCount; i++)
	{
		// Get roomNo
		Holder = theApp.m_pADOSet->GetCollect("roomNo");
	    str = Holder.vt==VT_NULL?"":(char*)(_bstr_t)Holder;
	    m_ListCtrl.InsertItem(i, str);
	    // Get room type
        Holder = theApp.m_pADOSet->GetCollect("roomtype");
	    str = Holder.vt==VT_NULL?"":(char*)(_bstr_t)Holder;
	    m_ListCtrl.SetItemText(i, 1, str);
		// Get position
        Holder = theApp.m_pADOSet->GetCollect("roomposition");
	   	str = Holder.vt==VT_NULL?"":(char*)(_bstr_t)Holder;
		//str.Format("%.2f", Holder.dblVal);
	    m_ListCtrl.SetItemText(i, 2, str);
		// Get price
        Holder = theApp.m_pADOSet->GetCollect("roomprice");
	    str.Format("%.2f",  Holder.vt==VT_NULL?0:Holder.dblVal);
	    m_ListCtrl.SetItemText(i, 3, str);
		// Get Putup
        Holder = theApp.m_pADOSet->GetCollect("putup");
	    if (Holder.vt==VT_NULL?0:Holder.iVal) str = _T("有"); else str = _T("没有");
		m_ListCtrl.SetItemText(i, 4, str);
		// Get Memo
       	Holder = theApp.m_pADOSet->GetCollect("roommemo");
	    str = Holder.vt==VT_NULL?"":(char*)(_bstr_t)Holder;
	    m_ListCtrl.SetItemText(i, 5, str);
				
		theApp.m_pADOSet->MoveNext();
	}
}

void CHotel_MISView::OnAlterRoom() 
{
	// TODO: Add your command handler code here
	_variant_t strQuery;
	
	if ( m_ListCtrl && m_sCurrentList!=_T("客房信息列表") )
	{
		m_ListCtrl.DestroyWindow();
	    strQuery = "select * from rooms";
		CreateRoom(strQuery);
	    return;
	}
    if ( !m_ListCtrl )
	{
		strQuery = "select * from rooms";
		CreateRoom(strQuery);
	    return;
	}
	
	//Popup Alter Dialog
	POSITION pos = m_ListCtrl.GetFirstSelectedItemPosition();
    if (pos == NULL) AfxMessageBox(_T("没有选中的记录!"), MB_ICONEXCLAMATION);
    else
	{
	   CRoomDLG dlg;
       dlg.m_bAppend = false;   
	   
	   int iItem = m_ListCtrl.GetNextSelectedItem(pos);
       // Get Room No
	   dlg.m_sNo = m_ListCtrl.GetItemText(iItem, 0);
	   // Get Room Type
       dlg.m_sType = m_ListCtrl.GetItemText(iItem, 1);
	   // Get Position
       dlg.m_sPosition = m_ListCtrl.GetItemText(iItem, 2);
	   // Get Price
       dlg.m_sPrice = m_ListCtrl.GetItemText(iItem, 3);
	   // Get Memo
       dlg.m_sMemo = m_ListCtrl.GetItemText(iItem, 5);
	  	   
	   dlg.DoModal();
	}
}

void CHotel_MISView::OnDelRoom() 
{
	// TODO: Add your command handler code here
	_variant_t Holder, strQuery;

	if ( m_ListCtrl && m_sCurrentList!="客房信息列表" )	
	{
		m_ListCtrl.DestroyWindow();
	    strQuery = "select * from rooms";
		CreateRoom( strQuery );
	    return;
	}
    if ( !m_ListCtrl )
	{
		strQuery = "select * from rooms";
		CreateRoom(strQuery);
	    return;
	}
	
	// Del Records
	POSITION pos = m_ListCtrl.GetFirstSelectedItemPosition();
    if ( pos == NULL ) 
	{
		AfxMessageBox(_T("没有选中的记录!"), MB_ICONEXCLAMATION);
		return;
	}
    else
	{
        int iItem;       
		CString sID;
		while (pos)
		{
            iItem = m_ListCtrl.GetNextSelectedItem(pos);
            sID = m_ListCtrl.GetItemText(iItem, 0);
		    strQuery = "delete from rooms where roomNo='"+sID+"'";
	        theApp.ADOExecute(theApp.m_pADOSet, strQuery);
		}
	}
	// Refresh List
	strQuery = "select * from rooms";
	RefreshRoom( strQuery );
}

void CHotel_MISView::OnCheckRoom() 
{
	// TODO: Add your command handler code here
	// Check RooType 
	_variant_t strQuery, Holder;	
	strQuery = "select typename from roomtype";
	theApp.ADOExecute(theApp.m_pADOSet, strQuery);
	int iCount = theApp.m_pADOSet->GetRecordCount();
	if ( 0==iCount ) 
	{
		AfxMessageBox(_T("请先进行客房标准设置!"), MB_ICONEXCLAMATION);
		return;
	}
		
	CCheckRoomDLG dlg;
	dlg.DoModal();
}

void CHotel_MISView::OnCheckRemain() 
{
	// TODO: Add your command handler code here
	
	// Check RoomType 
	_variant_t strQuery, Holder;	
	strQuery = "select typename from roomtype";
	theApp.ADOExecute(theApp.m_pADOSet, strQuery);
	int iCount = theApp.m_pADOSet->GetRecordCount();
	if ( 0==iCount ) 
	{
		AfxMessageBox(_T("请先进行客房标准设置!"), MB_ICONEXCLAMATION);
		return;
	}
	
	CCheckRemainDLG dlg;
	dlg.DoModal();
}

void CHotel_MISView::OnAddBookIn() 
{
	// TODO: Add your command handler code here
	
	// Check Rooms 
	_variant_t strQuery, Holder;	
	strQuery = "select * from rooms";
	theApp.ADOExecute(theApp.m_pADOSet, strQuery);
	int iCount = theApp.m_pADOSet->GetRecordCount();
	if ( 0==iCount ) 
	{
		AfxMessageBox(_T("请先进行客房信息设置!"), MB_ICONEXCLAMATION);
		return;
	}
		
	strQuery = "select * from rooms where putup=0 or putup is NULL";
	theApp.ADOExecute(theApp.m_pADOSet, strQuery);
	iCount = theApp.m_pADOSet->GetRecordCount();
	if ( 0==iCount ) 
	{
		AfxMessageBox(_T("客房已经全部定满!"), MB_ICONEXCLAMATION);
		return;
	}
	
	CBookInDLG dlg;
	dlg.m_bAppend = true;
	dlg.DoModal();
}

void CHotel_MISView::RefreshBookIn(_variant_t strQuery)
{
	if (m_ListCtrl)	m_ListCtrl.DestroyWindow();
	
 	CreateBookIn( strQuery );

	m_sCurrentList = _T("定房信息列表");
    m_StaticCtrl.SetWindowText(m_sCurrentList);
}

void CHotel_MISView::CreateBookIn(_variant_t strQuery)
{
	//Update m_sCurrentList and Static Ctrl
		
	// Get Client Rect
	CRect rect;
	GetClientRect(rect);
	rect.top += 30;

	// Create
	m_ListCtrl.Create(WS_CHILD|WS_VISIBLE|WS_BORDER|LVS_REPORT, rect, this, 1);

	// Set Color
	m_ListCtrl.SetBkColor(RGB(177, 151, 240));
	m_ListCtrl.SetTextColor(RGB(0,0,0));
	m_ListCtrl.SetTextBkColor(RGB(177, 151, 240));
	
	// Set EX-Style
	m_ListCtrl.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES|LVS_EX_HEADERDRAGDROP);

	// Create Header
	m_ListCtrl.InsertColumn(0,_T("定房编号"), LVCFMT_LEFT, 100);
	m_ListCtrl.InsertColumn(1,_T("顾客姓名"), LVCFMT_LEFT, 100);
    m_ListCtrl.InsertColumn(2,_T("身份证号码"), LVCFMT_LEFT, 100);
	m_ListCtrl.InsertColumn(3,_T("客房编号"), LVCFMT_LEFT, 100);
	m_ListCtrl.InsertColumn(4,_T("入住日期"), LVCFMT_LEFT, 100);
	m_ListCtrl.InsertColumn(5,_T("折扣%"), LVCFMT_LEFT, 100);
    m_ListCtrl.InsertColumn(6,_T("结帐时间"), LVCFMT_LEFT, 100);
	m_ListCtrl.InsertColumn(7,_T("租金"), LVCFMT_LEFT, 100);
	m_ListCtrl.InsertColumn(8,_T("备注"), LVCFMT_LEFT, 100);

	// Get all records
	_variant_t Holder;
    theApp.ADOExecute(theApp.m_pADOSet, strQuery);
    int iCount = theApp.m_pADOSet->GetRecordCount();
	if ( 0==iCount ) return;
	
    CString str;
	COleDateTime time;
	theApp.m_pADOSet->MoveFirst();
	for(int i=0; i<iCount; i++)
	{
		// Get bookno
		Holder = theApp.m_pADOSet->GetCollect("bookno");
	    str = Holder.vt==VT_NULL?"":(char*)(_bstr_t)Holder;
	    m_ListCtrl.InsertItem(i, str);
	    // Get customname
        Holder = theApp.m_pADOSet->GetCollect("customname");
	    str = Holder.vt==VT_NULL?"":(char*)(_bstr_t)Holder;
	    m_ListCtrl.SetItemText(i, 1, str);
		// Get customID
        Holder = theApp.m_pADOSet->GetCollect("customID");
	   	str = Holder.vt==VT_NULL?"":(char*)(_bstr_t)Holder;
		//str.Format("%.2f", Holder.dblVal);
	    m_ListCtrl.SetItemText(i, 2, str);
		// Get roomno
        Holder = theApp.m_pADOSet->GetCollect("roomno");
	    str = Holder.vt==VT_NULL?"":(char*)(_bstr_t)Holder;
	    m_ListCtrl.SetItemText(i, 3, str);
		// Get indate
        Holder = theApp.m_pADOSet->GetCollect("indate");
	    time = Holder;
		str = time.Format("%Y-%m-%d");
		m_ListCtrl.SetItemText(i, 4, str);
		// Get discount
       	Holder = theApp.m_pADOSet->GetCollect("discount");
	    str.Format("%.2f",  Holder.vt==VT_NULL?0:Holder.dblVal);
	    m_ListCtrl.SetItemText(i, 5, str);
        // Get checkdate
        Holder = theApp.m_pADOSet->GetCollect("checkdate");
		if ( VT_NULL==Holder.vt ) str="N/A";
		else 
		{
			time = Holder;
			str = time.Format("%Y-%m-%d");
		}
		m_ListCtrl.SetItemText(i, 6, str);
		// Get ammount
       	Holder = theApp.m_pADOSet->GetCollect("ammount");
	    if ( VT_NULL==Holder.vt ) str="N/A";
		else str.Format("%.2f",  Holder.vt==VT_NULL?0:Holder.dblVal);
	    m_ListCtrl.SetItemText(i, 7, str);
        // Get inmemo
        Holder = theApp.m_pADOSet->GetCollect("inmemo");
	    str = Holder.vt==VT_NULL?"":(char*)(_bstr_t)Holder;
        m_ListCtrl.SetItemText(i, 8, str);

		theApp.m_pADOSet->MoveNext();
	}
}

void CHotel_MISView::OnAlterBookIn() 
{
	// TODO: Add your command handler code here
	_variant_t strQuery;
	
	if ( m_ListCtrl && m_sCurrentList!=_T("定房信息列表") )
	{
		m_ListCtrl.DestroyWindow();
	    strQuery = "select * from bookin where checkdate is NULL";
		CreateBookIn(strQuery);
	    
		m_sCurrentList = _T("定房信息列表");
        m_StaticCtrl.SetWindowText(m_sCurrentList);
		
		return;
	}
    if ( !m_ListCtrl )
	{
		strQuery = "select * from bookin where checkdate is NULL";
		CreateBookIn(strQuery);
	    
		m_sCurrentList = _T("定房信息列表");
    	m_StaticCtrl.SetWindowText(m_sCurrentList);
		
		return;
	}
    //Popup Alter Dialog
	POSITION pos = m_ListCtrl.GetFirstSelectedItemPosition();
    if (pos == NULL) AfxMessageBox(_T("没有选中的记录!"), MB_ICONEXCLAMATION);
    else
	{
	   CBookInDLG dlg;
       dlg.m_bAppend = false;   
	   
	   CString str;
	   int iItem = m_ListCtrl.GetNextSelectedItem(pos);
       // Get Room No
	   dlg.m_sRoomNo  = m_ListCtrl.GetItemText(iItem, 3);
	   // Get Name
       dlg.m_sName = m_ListCtrl.GetItemText(iItem, 1);
	   // Get ID
       dlg.m_sID = m_ListCtrl.GetItemText(iItem, 2);
	   // Get InDate
       _variant_t strQuery, Holder;	
	   strQuery = "select indate from bookin where roomno='"+dlg.m_sRoomNo+"'";
	   theApp.ADOExecute(theApp.m_pADOSet, strQuery);
	   Holder = theApp.m_pADOSet->GetCollect("indate");
	   dlg.m_tInDAte = Holder;
	   // Get discount
       dlg.m_sDiscount = m_ListCtrl.GetItemText(iItem, 5);
	   // Get Memo
       dlg.m_sMemo = m_ListCtrl.GetItemText(iItem, 8);
	   
	   dlg.DoModal();
	}
}

void CHotel_MISView::OnSearchBookIn() 
{
	// TODO: Add your command handler code here
	CSearchBookInDLG dlg;
	dlg.DoModal();
}

void CHotel_MISView::OnAddCheckOut() 
{
	// TODO: Add your command handler code here
	
	// Check if any record exist
	_variant_t strQuery, Holder;	
	strQuery = "select * from bookin";
	theApp.ADOExecute(theApp.m_pADOSet, strQuery);
	int iCount = theApp.m_pADOSet->GetRecordCount();
	if ( 0==iCount ) 
	{
		AfxMessageBox(_T("没有顾客入住!"), MB_ICONEXCLAMATION);
		return;
	}
	
	// Check if any not checked record exist
	strQuery = "select * from bookin where checkdate is NULL";
	theApp.ADOExecute(theApp.m_pADOSet, strQuery);
	iCount = theApp.m_pADOSet->GetRecordCount();
	if ( 0==iCount ) 
	{
		AfxMessageBox(_T("全部客房均以结算!"), MB_ICONEXCLAMATION);
		strQuery = "select * from bookin where checkdate is not NULL";
		RefreshCheckOut(strQuery);
		return;
	}
	
	CCheckOutDLG dlg;
	dlg.m_bAppend = true;
	dlg.DoModal();
}

void CHotel_MISView::RefreshCheckOut(_variant_t strQuery)
{
	if (m_ListCtrl)	m_ListCtrl.DestroyWindow();
	
 	CreateBookIn( strQuery );

	m_sCurrentList = _T("结算信息列表");
    m_StaticCtrl.SetWindowText(m_sCurrentList);
}

void CHotel_MISView::OnAlterCheckOut() 
{
	// TODO: Add your command handler code here
	_variant_t strQuery;
	
	if ( m_ListCtrl && m_sCurrentList!=_T("结算信息列表") )
	{
		m_ListCtrl.DestroyWindow();
	    strQuery = "select * from bookin where checkdate is not NULL";
		CreateBookIn(strQuery);
	    
		m_sCurrentList = _T("结算信息列表");
        m_StaticCtrl.SetWindowText(m_sCurrentList);
		
		return;
	}
    if ( !m_ListCtrl )
	{
		strQuery = "select * from bookin where checkdate is not NULL";
		CreateBookIn(strQuery);
	    
		m_sCurrentList = _T("结算信息列表");
    	m_StaticCtrl.SetWindowText(m_sCurrentList);
		
		return;
	}
	POSITION pos = m_ListCtrl.GetFirstSelectedItemPosition();
    if (pos == NULL) AfxMessageBox(_T("没有选中的记录!"), MB_ICONEXCLAMATION);
    else
	{
	   CCheckOutDLG dlg;
	   dlg.m_bAppend = false;
	   
	   CString str;
	   int iItem = m_ListCtrl.GetNextSelectedItem(pos);
       // Get Room No
	   dlg.m_sRoomNo = m_ListCtrl.GetItemText(iItem, 3);
	   // Get Name
       dlg.m_sName = m_ListCtrl.GetItemText(iItem, 1);
	   // Get ID
       dlg.m_sID = m_ListCtrl.GetItemText(iItem, 2);
	   // Get InDate
       dlg.m_sInDate = m_ListCtrl.GetItemText(iItem, 4);
	   // Get discount
       dlg.m_sDiscount = m_ListCtrl.GetItemText(iItem, 5);
	   // Get Memo
       dlg.m_sMemo = m_ListCtrl.GetItemText(iItem, 8);
	   // Get CheckOut Date
       _variant_t strQuery, Holder;	
	   strQuery = "select checkdate from bookin where roomno='"+dlg.m_sRoomNo+"'";
	   theApp.ADOExecute(theApp.m_pADOSet, strQuery);
	   Holder = theApp.m_pADOSet->GetCollect("checkdate");
	   dlg.m_tOutDate = Holder;
	   
	   dlg.DoModal();
	}
}

void CHotel_MISView::OnSearchCheckOut() 
{
	// TODO: Add your command handler code here
	CSearchCheckOutDLG dlg;
	dlg.DoModal();
}